package com.zjw.study.thread02_timer;

import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 两个定时器的套用
 * 问：一个定时器，两个间隔时间标准
 * 第一个每2秒执行一次，第二个每5秒执行一次
 * @author Administrator
 *
 */
public class TraditionalTimer02 {
	public static void main(String[] args) {
		TraditionalTimer02 t = new TraditionalTimer02();
//		t.scheduleTwo();
		t.scheduleTwo_digui(true);
		
		while (true) {
			try {
				System.out.println(Calendar.getInstance().get(Calendar.SECOND));
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 两个定时器交叉执行，时间间隔不同
	 */
	void scheduleTwo() {
		System.out.println("schedule two execute...");
		//使用内部类，类似于递归的方式实现
		class MyTimerTask extends TimerTask {
			boolean b = true;
			public MyTimerTask() { }
			public MyTimerTask(boolean b) {
				this.b = b;
			}
			@Override
			public void run() {
				System.out.println("tiemr task execute~~");
				
				//再次执行的时间处理
				long delay = 1000;
				if(b) {
					delay = 3000;
				}
				
				//再次调用自己，其思路和 递归 相似
				new Timer().schedule(new MyTimerTask(!b), delay);
			}
		}
//		new Timer().schedule(new MyTimerTask(), 1000);
		new MyTimerTask().run();//也可直接调用内部类的方式
	}
	
	/**
	 * 对上面的功能的改造，使用方法调用递归
	 */
	void scheduleTwo_digui(boolean b) {
		long delay = 1000;
		if(b) {
			delay = 3000;
		}
		new Timer().schedule(new TimerTask() {
			@Override
			public void run() {
				System.out.println("timer task digui execute...");
				scheduleTwo_digui(!b);
			}
		}, delay);
	}
}
